#include "change_image.h"
// 改变图像尺寸
cv::Mat resizeImage(const cv::Mat &image, int h, int w) {
    // 转换成BGR图片
    cv::Mat rgbImage;
    cv::cvtColor(image, rgbImage, cv::COLOR_BGR2RGB);

    // 修改图片尺寸
    cv::Mat resizedImage;
    if (h > w) {
        cv::resize(rgbImage, resizedImage, cv::Size(int(w * 640.0 / h), 640));
    } else {
        cv::resize(rgbImage, resizedImage, cv::Size(640, int(h * 640.0 / w)));
    }

    // 创建蒙版图片
    cv::Mat background = cv::Mat::zeros(640, 640, resizedImage.type());
    background.setTo(cv::Scalar(255, 0, 0));

    // 将图像居中放置
    int x_offset = (640 - resizedImage.cols) / 2;
    int y_offset = (640 - resizedImage.rows) / 2;
    cv::Rect roi(x_offset, y_offset, resizedImage.cols, resizedImage.rows);
    resizedImage.copyTo(background(roi));

    return background;
}

// hwc图像转换为NCHW
std::vector<float> nchwImage(const cv::Mat &image) {
    // 将像素值转换为浮点数，并将其归一化到0~1之间
    cv::Mat img_float;
    image.convertTo(img_float, CV_32F, 1.0 / 255.0);

    // 图像从HWC格式转换为CHW格式
    std::vector<float> img_chw;
    std::vector<cv::Mat> bgrChannels(3);
    cv::split(img_float, bgrChannels);
    for (auto i = 0; i < bgrChannels.size(); i++)
    {
        std::vector<float> data = std::vector<float>(bgrChannels[i].reshape(1, 1));
        img_chw.insert(img_chw.end(), data.begin(), data.end());
    }

    return img_chw;
}